#pragma once
#include <iostream>
#include <fcntl.h>
#include <cstring>
#include <unistd.h>
#include "Log.hpp"

using namespace log_ns;

enum {
    SOCKET_ERROR = 1,
    BIND_ERROR,
    LISTEN_ERROR,
    EPOLL_CREATE_ERROR,
    EPOLL_CTL_ERROR,
    EPOLL_WAIT_ERROR
};

void SetNonBlock(int fd) {
    // 使用F_GETFL将当前文件描述符的属性取出来（f1当前可以将其看作为位图）
    int f1 = fcntl(fd, F_GETFL);
    if (f1 < 0) {
        LOG(FATAL, "set none block error, the reason is %s, fd: %d\n", strerror(errno), fd);
        return;
    }
    // 然后使用F_SETFL将文件描述符设置回去，设置回去的同时，加上一个O_NONBLOCK参数
    fcntl(fd, F_SETFL, f1 | O_NONBLOCK);
}